package com.unit1;

import java.util.LinkedList;
import java.util.Stack;

/**
 * @author Siaze
 * 题目：请用1，2，5，7，8，9这六个数字（每个数字至多用一次）来组成一个五位数，使得它能被75整除，并求出这样的五位数有几个？
 */
public class Two {
    private static Stack<Integer> stack = new Stack<>();
    private static LinkedList<Integer> results = new LinkedList<>();
    public static void main(String[] args) {
        int[] nums = {1,2,5,7,8,9};
        fun(nums,5,0);
        // Java8新特性lambada表达式
        results.sort((a,b)->{
            return b-a;
        });
        for (int i = 0; i < results.size(); i++) {
            if (results.get(i)%75==0){
                System.out.println("这六个数字所组成的五位数中，能被75整除的最大的数是"+results.get(i)+"。");
                break;
            }
        }
    }

    /**
     * 排列组合
     * @param numbers 需要排列组组合的数组
     * @param tag  排列组合的长度
     * @param times 排列组合的次数。调用请使用0
     */
    private static void fun(int[] numbers, int tag, int times){
        if(tag == times){
            int sum = 0;
            for (int i = 0; i < tag; i++) {
                sum+=Math.pow(10,tag-i-1)*stack.get(i);
            }
            results.push(sum);
        }

        for (int i = 0; i < numbers.length; i++) {
            if(!stack.contains(numbers[i])){
                stack.push(numbers[i]);
                fun(numbers,tag,times+1);
                stack.pop();
            }
        }
    }
}
